home *** CD-ROM | disk | FTP | other *** search
- package javax.swing.tree;
-
- import java.awt.Rectangle;
- import java.util.Enumeration;
- import java.util.Hashtable;
- import java.util.Stack;
- import java.util.Vector;
- import javax.swing.event.TreeModelEvent;
-
- public class FixedHeightLayoutCache extends AbstractLayoutCache {
- private FHTreeStateNode root;
- private int rowCount;
- private Rectangle boundsBuffer = new Rectangle();
- private Hashtable treePathMapping = new Hashtable();
- private SearchInfo info = new SearchInfo(this);
- private Stack tempStacks = new Stack();
-
- // $FF: synthetic method
- static void access$0(FixedHeightLayoutCache var0, FHTreeStateNode var1) {
- var0.addMapping(var1);
- }
-
- // $FF: synthetic method
- static void access$1(FixedHeightLayoutCache var0, FHTreeStateNode var1) {
- var0.removeMapping(var1);
- }
-
- // $FF: synthetic method
- static FHTreeStateNode access$2(FixedHeightLayoutCache var0, Object var1, int var2) {
- return var0.createNodeForValue(var1, var2);
- }
-
- // $FF: synthetic method
- static void access$3(FixedHeightLayoutCache var0, int var1) {
- var0.adjustRowCountBy(var1);
- }
-
- // $FF: synthetic method
- static int access$4(FixedHeightLayoutCache var0) {
- return var0.rowCount;
- }
-
- // $FF: synthetic method
- static void access$5(FixedHeightLayoutCache var0, int var1) {
- var0.rowCount = var1;
- }
-
- // $FF: synthetic method
- static FHTreeStateNode access$6(FixedHeightLayoutCache var0) {
- return var0.root;
- }
-
- private void addMapping(FHTreeStateNode var1) {
- this.treePathMapping.put(var1.getTreePath(), var1);
- }
-
- private void adjustRowCountBy(int var1) {
- this.rowCount += var1;
- }
-
- private FHTreeStateNode createNodeForValue(Object var1, int var2) {
- return new FHTreeStateNode(this, var1, var2, -1);
- }
-
- private boolean ensurePathIsExpanded(TreePath var1, boolean var2) {
- if (var1 != null) {
- if (super.treeModel.isLeaf(var1.getLastPathComponent())) {
- var1 = var1.getParentPath();
- var2 = true;
- }
-
- if (var1 != null) {
- FHTreeStateNode var3 = this.getNodeForPath(var1, false, true);
- if (var3 != null) {
- var3.makeVisible();
- if (var2) {
- var3.expand();
- }
-
- return true;
- }
- }
- }
-
- return false;
- }
-
- private Rectangle getBounds(FHTreeStateNode var1, int var2, Rectangle var3) {
- boolean var4;
- int var5;
- int var6;
- Object var7;
- if (var2 == -1) {
- var6 = var1.getRow();
- var7 = ((DefaultMutableTreeNode)var1).getUserObject();
- var4 = var1.isExpanded();
- var5 = ((DefaultMutableTreeNode)var1).getLevel();
- } else {
- var6 = var1.getRowToModelIndex(var2);
- var7 = super.treeModel.getChild(((DefaultMutableTreeNode)var1).getUserObject(), var2);
- var4 = false;
- var5 = ((DefaultMutableTreeNode)var1).getLevel() + 1;
- }
-
- Rectangle var8 = ((AbstractLayoutCache)this).getNodeDimensions(var7, var6, var5, var4, this.boundsBuffer);
- if (var8 == null) {
- return null;
- } else {
- if (var3 == null) {
- var3 = new Rectangle();
- }
-
- var3.x = var8.x;
- var3.height = ((AbstractLayoutCache)this).getRowHeight();
- var3.y = var6 * var3.height;
- var3.width = this.boundsBuffer.width;
- return var3;
- }
- }
-
- public Rectangle getBounds(TreePath var1, Rectangle var2) {
- if (var1 == null) {
- return null;
- } else {
- FHTreeStateNode var3 = this.getNodeForPath(var1, true, false);
- if (var3 != null) {
- return this.getBounds(var3, -1, var2);
- } else {
- TreePath var4 = var1.getParentPath();
- var3 = this.getNodeForPath(var4, true, false);
- if (var3 != null) {
- int var5 = super.treeModel.getIndexOfChild(var4.getLastPathComponent(), var1.getLastPathComponent());
- if (var5 != -1) {
- return this.getBounds(var3, var5, var2);
- }
- }
-
- return null;
- }
- }
- }
-
- public boolean getExpandedState(TreePath var1) {
- FHTreeStateNode var2 = this.getNodeForPath(var1, true, false);
- return var2 != null ? var2.isVisible() && var2.isExpanded() : false;
- }
-
- private FHTreeStateNode getMapping(TreePath var1) {
- return (FHTreeStateNode)this.treePathMapping.get(var1);
- }
-
- private FHTreeStateNode getNodeForPath(TreePath var1, boolean var2, boolean var3) {
- if (var1 != null) {
- FHTreeStateNode var4 = this.getMapping(var1);
- if (var4 != null) {
- return var2 && !var4.isVisible() ? null : var4;
- } else if (var2) {
- return null;
- } else {
- Stack var5;
- if (this.tempStacks.size() == 0) {
- var5 = new Stack();
- } else {
- var5 = (Stack)this.tempStacks.pop();
- }
-
- try {
- var5.push(var1);
- var1 = var1.getParentPath();
-
- for(Object var13 = null; var1 != null; var1 = var1.getParentPath()) {
- var4 = this.getMapping(var1);
- if (var4 != null) {
- while(var4 != null && ((Vector)var5).size() > 0) {
- var1 = (TreePath)var5.pop();
- var4 = var4.createChildFor(var1.getLastPathComponent());
- }
-
- FHTreeStateNode var6 = var4;
- return var6;
- }
-
- var5.push(var1);
- }
-
- return null;
- } finally {
- ((Vector)var5).removeAllElements();
- this.tempStacks.push(var5);
- }
- }
- } else {
- return null;
- }
- }
-
- public TreePath getPathClosestTo(int var1, int var2) {
- if (this.getRowCount() == 0) {
- return null;
- } else {
- int var3 = this.getRowContainingYLocation(var2);
- return this.getPathForRow(var3);
- }
- }
-
- public TreePath getPathForRow(int var1) {
- return var1 >= 0 && var1 < this.getRowCount() && this.root.getPathForRow(var1, this.getRowCount(), this.info) ? this.info.getPath() : null;
- }
-
- private int getRowContainingYLocation(int var1) {
- return this.getRowCount() == 0 ? -1 : Math.max(0, Math.min(this.getRowCount() - 1, var1 / ((AbstractLayoutCache)this).getRowHeight()));
- }
-
- public int getRowCount() {
- return this.rowCount;
- }
-
- public int getRowForPath(TreePath var1) {
- if (var1 != null && this.root != null) {
- FHTreeStateNode var2 = this.getNodeForPath(var1, true, false);
- if (var2 != null) {
- return var2.getRow();
- } else {
- TreePath var3 = var1.getParentPath();
- var2 = this.getNodeForPath(var3, true, false);
- return var2 != null ? var2.getRowToModelIndex(super.treeModel.getIndexOfChild(var3.getLastPathComponent(), var1.getLastPathComponent())) : -1;
- }
- } else {
- return -1;
- }
- }
-
- public int getVisibleChildCount(TreePath var1) {
- FHTreeStateNode var2 = this.getNodeForPath(var1, true, false);
- return var2 == null ? 0 : var2.getTotalChildCount();
- }
-
- public Enumeration getVisiblePathsFrom(TreePath var1) {
- if (var1 == null) {
- return null;
- } else {
- FHTreeStateNode var2 = this.getNodeForPath(var1, true, false);
- if (var2 != null) {
- return new VisibleFHTreeStateNodeEnumeration(this, var2);
- } else {
- TreePath var3 = var1.getParentPath();
- var2 = this.getNodeForPath(var3, true, false);
- return var2 != null && var2.isExpanded() ? new VisibleFHTreeStateNodeEnumeration(this, var2, super.treeModel.getIndexOfChild(var3.getLastPathComponent(), var1.getLastPathComponent())) : null;
- }
- }
- }
-
- public void invalidatePathBounds(TreePath var1) {
- }
-
- public void invalidateSizes() {
- this.visibleNodesChanged();
- }
-
- public boolean isExpanded(TreePath var1) {
- if (var1 == null) {
- return false;
- } else {
- FHTreeStateNode var2 = this.getNodeForPath(var1, true, false);
- return var2 != null && var2.isExpanded();
- }
- }
-
- private void rebuild() {
- this.treePathMapping.clear();
- if (super.treeModel != null) {
- Object var1 = super.treeModel.getRoot();
- this.root = this.createNodeForValue(var1, 0);
- this.root.path = new TreePath(var1);
- this.addMapping(this.root);
- if (((AbstractLayoutCache)this).isRootVisible()) {
- this.rowCount = 1;
- this.root.row = 0;
- } else {
- this.rowCount = 0;
- this.root.row = -1;
- }
-
- this.root.expand();
- } else {
- this.root = null;
- this.rowCount = 0;
- }
-
- if (super.treeSelectionModel != null) {
- super.treeSelectionModel.clearSelection();
- }
-
- this.visibleNodesChanged();
- }
-
- private void removeMapping(FHTreeStateNode var1) {
- this.treePathMapping.remove(var1.getTreePath());
- }
-
- public void setExpandedState(TreePath var1, boolean var2) {
- if (var2) {
- this.ensurePathIsExpanded(var1, true);
- } else if (var1 != null) {
- TreePath var3 = var1.getParentPath();
- if (var3 != null) {
- FHTreeStateNode var4 = this.getNodeForPath(var3, false, true);
- if (var4 != null) {
- var4.makeVisible();
- }
- }
-
- FHTreeStateNode var5 = this.getNodeForPath(var1, true, false);
- if (var5 != null) {
- var5.collapse(true);
- }
- }
-
- }
-
- public void setModel(TreeModel var1) {
- super.setModel(var1);
- this.rebuild();
- }
-
- public void setRootVisible(boolean var1) {
- if (((AbstractLayoutCache)this).isRootVisible() != var1) {
- super.setRootVisible(var1);
- if (this.root != null) {
- if (var1) {
- ++this.rowCount;
- this.root.adjustRowBy(1);
- } else {
- --this.rowCount;
- this.root.adjustRowBy(-1);
- }
-
- this.visibleNodesChanged();
- }
- }
-
- }
-
- public void setRowHeight(int var1) {
- if (var1 <= 0) {
- throw new IllegalArgumentException("FixedHeightLayoutCache only supports row heights greater than 0");
- } else {
- if (((AbstractLayoutCache)this).getRowHeight() != var1) {
- super.setRowHeight(var1);
- this.visibleNodesChanged();
- }
-
- }
- }
-
- public void treeNodesChanged(TreeModelEvent var1) {
- if (var1 != null) {
- FHTreeStateNode var3 = this.getNodeForPath(var1.getTreePath(), false, false);
- int[] var2 = var1.getChildIndices();
- if (var3 != null) {
- int var4;
- if (var2 != null && (var4 = var2.length) > 0) {
- Object var5 = ((DefaultMutableTreeNode)var3).getUserObject();
-
- for(int var6 = 0; var6 < var4; ++var6) {
- FHTreeStateNode var7 = var3.getChildAtModelIndex(var2[var6]);
- if (var7 != null) {
- var7.setUserObject(super.treeModel.getChild(var5, var2[var6]));
- }
- }
-
- if (var3.isVisible() && var3.isExpanded()) {
- this.visibleNodesChanged();
- }
- } else if (var3 == this.root && var3.isVisible() && var3.isExpanded()) {
- this.visibleNodesChanged();
- }
- }
- }
-
- }
-
- public void treeNodesInserted(TreeModelEvent var1) {
- if (var1 != null) {
- FHTreeStateNode var3 = this.getNodeForPath(var1.getTreePath(), false, false);
- int[] var2 = var1.getChildIndices();
- int var4;
- if (var3 != null && var2 != null && (var4 = var2.length) > 0) {
- boolean var5 = var3.isVisible() && var3.isExpanded();
-
- for(int var6 = 0; var6 < var4; ++var6) {
- var3.childInsertedAtModelIndex(var2[var6], var5);
- }
-
- if (var5 && super.treeSelectionModel != null) {
- super.treeSelectionModel.resetRowSelection();
- }
-
- if (var3.isVisible()) {
- this.visibleNodesChanged();
- }
- }
- }
-
- }
-
- public void treeNodesRemoved(TreeModelEvent var1) {
- if (var1 != null) {
- TreePath var4 = var1.getTreePath();
- FHTreeStateNode var5 = this.getNodeForPath(var4, false, false);
- int[] var2 = var1.getChildIndices();
- int var3;
- if (var5 != null && var2 != null && (var3 = var2.length) > 0) {
- Object[] var6 = var1.getChildren();
- boolean var7 = var5.isVisible() && var5.isExpanded();
-
- for(int var8 = var3 - 1; var8 >= 0; --var8) {
- var5.removeChildAtModelIndex(var2[var8], var7);
- if (super.treeSelectionModel != null && var6 != null && var6[var8] != null) {
- super.treeSelectionModel.removeSelectionPath(var4.pathByAddingChild(var6[var8]));
- }
- }
-
- if (var7) {
- if (super.treeSelectionModel != null) {
- super.treeSelectionModel.resetRowSelection();
- }
-
- this.visibleNodesChanged();
- } else if (var5.isVisible()) {
- this.visibleNodesChanged();
- }
- }
- }
-
- }
-
- public void treeStructureChanged(TreeModelEvent var1) {
- if (var1 != null) {
- TreePath var2 = var1.getTreePath();
- if (var2 != null && var2.getPathCount() > 0) {
- if (var2.getPathCount() == 1) {
- this.rebuild();
- } else {
- FHTreeStateNode var3 = this.getNodeForPath(var2, false, false);
- if (var3 != null) {
- FHTreeStateNode var7 = (FHTreeStateNode)((DefaultMutableTreeNode)var3).getParent();
- int var8 = var3.getRow();
- boolean var4 = var3.isExpanded();
- boolean var5 = var3.isVisible();
- if (var5 && var4) {
- var3.collapse(true);
- ((DefaultMutableTreeNode)var3).removeFromParent();
- var3 = this.getNodeForPath(var2, false, true);
- var3.expand();
- } else {
- ((DefaultMutableTreeNode)var3).removeFromParent();
- }
-
- if (super.treeSelectionModel != null && var5 && var4) {
- super.treeSelectionModel.resetRowSelection();
- }
-
- if (var5) {
- this.visibleNodesChanged();
- }
- }
- }
- }
- }
-
- }
-
- private void visibleNodesChanged() {
- }
- }
-